import os
import sys
from src.tools.main import process_root_request

# 确保输出目录存在
def ensure_output_dir():
    output_dir = "d:/learnning/tools_ex2/output/ex1"
    os.makedirs(output_dir, exist_ok=True)
    print(f"确保输出目录存在: {output_dir}")

# 测试需求文档生成
def test_requirement_document():
    print("\n===== 测试需求文档生成 =====")
    user_input = "创建一个简单的用户管理系统，包含用户注册、登录、查询和删除功能"
    result = process_root_request("requirement_document", user_input)
    print(f"需求文档处理结果: {result.get('status')}")
    return result

# 测试设计文档生成
def test_design_document():
    print("\n===== 测试设计文档生成 =====")
    user_input = "基于用户管理系统的需求，设计系统架构，包含控制器、服务层和数据访问层"
    result = process_root_request("design_document", user_input)
    print(f"设计文档处理结果: {result.get('status')}")
    return result

# 测试代码生成
def test_codes_document():
    print("\n===== 测试代码生成任务列表 =====")
    user_input = "根据设计生成用户管理系统的核心代码文件，包括用户控制器、服务层和数据模型"
    result = process_root_request("codes_document", user_input)
    print(f"代码任务列表处理结果: {result.get('status')}")
    if result.get('status') == 'success' and 'result' in result:
        print(f"生成的代码任务数: {len(result['result'].get('tasks', []))}")
    return result

# 测试单个代码文件生成 (用于测试递归调用)
def test_code_document():
    print("\n===== 测试单个代码文件生成 =====")
    user_input = "生成用户服务模块的实现代码，包含用户的创建、查询、更新和删除功能"
    result = process_root_request("code_document", user_input)
    print(f"单个代码文件处理结果: {result.get('status')}")
    if result.get('status') == 'success' and 'result' in result:
        print(f"生成的文件路径: {result['result'].get('file_path')}")
    return result

# 测试测试用例文档生成
def test_testcases_document():
    print("\n===== 测试测试用例文档生成 =====")
    user_input = "为用户管理系统编写测试用例，覆盖所有核心功能"
    result = process_root_request("testcases_document", user_input)
    print(f"测试用例文档处理结果: {result.get('status')}")
    return result

# 测试测试代码生成任务列表
def test_testcases_code_document():
    print("\n===== 测试测试代码生成任务列表 =====")
    user_input = "为用户管理系统生成测试代码，包括单元测试和集成测试"
    result = process_root_request("testcases_code_document", user_input)
    print(f"测试代码任务列表处理结果: {result.get('status')}")
    if result.get('status') == 'success' and 'result' in result:
        print(f"生成的测试代码任务数: {len(result['result'].get('tasks', []))}")
    return result

# 测试单个测试文件生成
def test_testcase_document():
    print("\n===== 测试单个测试文件生成 =====")
    user_input = "生成用户服务的单元测试代码"
    result = process_root_request("testcase_document", user_input)
    print(f"单个测试文件处理结果: {result.get('status')}")
    if result.get('status') == 'success' and 'result' in result:
        print(f"生成的测试文件路径: {result['result'].get('file_path')}")
    return result

# 检查输出目录内容
def check_output_files():
    print("\n===== 检查输出目录内容 =====")
    base_dir = "d:/learnning/tools_ex2/output/ex1"
    
    if not os.path.exists(base_dir):
        print(f"输出目录不存在: {base_dir}")
        return
    
    # 遍历目录结构
    for root, dirs, files in os.walk(base_dir):
        level = root.replace(base_dir, '').count(os.sep)
        indent = ' ' * 4 * level
        print(f"{indent}{os.path.basename(root)}/")
        subindent = ' ' * 4 * (level + 1)
        for file in files:
            print(f"{subindent}{file}")
    
    print("\n注意: 已取消所有测试文件的清理功能，生成的文件将被保留以便检查。")

# 主函数
def main():
    try:
        # 确保输出目录存在
        ensure_output_dir()
        
        # 运行整个流程测试
        test_requirement_document()
        test_design_document()
        test_testcases_document()
        test_codes_document()
        test_code_document()
        test_testcases_code_document()
        test_testcase_document()
        
        # 检查输出文件
        check_output_files()
        
        print("\n===== 测试完成 =====")
    except Exception as e:
        print(f"测试过程中出错: {str(e)}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    main()